package com.wanyu.video.nio.buffer;


import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * MappedBuffer可以让文件直接在堆外内存中修改，操作系统不需要copy
 */
public class MappedBufferTest {

    public static void main(String[] args) throws IOException {


        RandomAccessFile randomAccessFile = new RandomAccessFile("C:\\git_code\\netty-in-action-learn\\file\\can-change.txt", "rw");
        FileChannel channel = randomAccessFile.getChannel();

        /*
         * 参数2 表示可以直接修改的起始位置
         * 参数3 是映射到内存的大小，就是映射到内存中可以修改的范围
         *  5不是索引位置，而是字节大小位置，对应的实际坐标应该是4
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

        mappedByteBuffer.put(0, (byte) 'x');
        mappedByteBuffer.put(1, (byte) 'x');

        channel.close();
        randomAccessFile.close();
    }
}
